package java811.java1;


import org.junit.Test;

import java.util.Comparator;

/**
 * Lambda表达式的使用举例  Lambda表达式的本质：作为函数式接口的实例
 */
public class LambdaTest {

    @Test
    public void test1(){
        // 多线程的接口 Runnable
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("我爱北京天安门");
            }
        };
        r1.run();

        System.out.println("***********************");

        Runnable r2 = () -> System.out.println("我爱北京故宫");// Lambda表达式的本质：作为函数式接口的实例
        r2.run();
    }


    @Test
    public void test2(){

        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1,o2);  // Integer.compare
            }
        };

        System.out.println("原始的写法"+com1.compare(12,21));

        System.out.println("Lambda表达式的写法");
        Comparator<Integer> com2 = (o1,o2) -> Integer.compare(o1,o2); // 形参列表是接口中抽象方法的形参列表, 方法体其实就是重写的抽象方法的方法体
        System.out.println(com2.compare(32,21));


        System.out.println("方法引用的写法");
        Comparator<Integer> com3 = Integer :: compare;
        System.out.println(com3.compare(32,21));
    }

}
